Las respuestas de esta pregunta son un esfuerzo comunitario. Edite las respuestas existentes para mejorar esta publicación. Actualmente no acepta nuevas respuestas o interacciones. Escribí algo incorrecto en un mensaje de confirmación. ¿Cómo puedo cambiar el mensaje? La confirmación aún no se ha enviado.
2020-12-07 22:15:09
Modificar el mensaje de confirmación más reciente git commit --enmendar abrirá su editor, permitiéndole cambiar el mensaje de confirmación de la confirmación más reciente. Además, puede configurar el mensaje de confirmación directamente en la línea de comando con: git commit --amend -m "Nuevo mensaje de confirmación" ... sin embargo, esto puede hacer que los mensajes de confirmación de varias líneas o pequeñas correcciones sean más complicados de ingresar. Asegúrese de no tener ningún cambio de copia de trabajo preparado antes de hacer esto o también se confirmarán. (Los cambios sin etapas no se confirmarán). Cambiar el mensaje de una confirmación que ya ha enviado a su rama remota Si ya ha enviado su confirmación a su rama remota, entonces, después de modificar su confirmación localmente (como se describe arriba), también deberá forzar la confirmación con: git push--force # O git push -f Advertencia: el empuje forzado sobrescribirá la rama remota con el estado de la local. Si hay confirmaciones en la rama remota que no tiene en su rama local, perderá esas confirmaciones. Advertencia: tenga cuidado al modificar las confirmaciones que ya ha compartido con otras personas. La modificación de las confirmaciones esencialmente las reescribe para que tengan diferentes ID de SHA, lo que plantea un problema si otras personas tienen copias de la confirmación anterior que ha reescrito. Cualquiera que tenga una copia de la confirmación anterior deberá sincronizar su trabajo con la confirmación recientemente reescrita, lo que a veces puede ser difícil, así que asegúrese de coordinar con otros cuando intente reescribir el historial de confirmaciones compartidas, o simplemente evite reescribir las confirmaciones compartidas. en total. Realizar un rebase interactivo Otra opción es utilizar rebase interactivo. Esto le permite editar cualquier mensaje que desee actualizar incluso si no es el último mensaje. Para hacer un Git Squash, siga estos pasos: // n es el número de confirmaciones hasta la última confirmación que desea poder editar git rebase -i HEAD ~ n Una vez que aplastes tus confirmaciones, elige e / r para editar el mensaje: Nota importante sobre la rebase interactiva Cuando usas git rebase -i HEAD ~ n, puede haber más de n confirmaciones. Git "recopilará" todas las confirmaciones en las últimas n confirmaciones, y si hubo una fusión en algún lugar entre ese rango, también verá todas las confirmaciones, por lo que el resultado será n +. Buen consejo: Si tiene que hacerlo para más de una rama y puede enfrentar conflictos al modificar el contenido, configure git rerere y deje que Git resuelva esos conflictos automáticamente por usted. Documentación git-commit (1) Página del manual git-rebase (1) Página del manual git-push (1) Página del manual | git commit --amend -m "tu nuevo mensaje" | Si la confirmación que desea corregir no es la más reciente: git rebase --interactivo $ parent_of_flawed_commit Si desea corregir varias confirmaciones defectuosas, pase el padre de la más antigua de ellas. Aparecerá un editor con una lista de todas las confirmaciones desde la que proporcionaste. Cambie la selección para reformular (o en versiones antiguas de Git, para editar) delante de las confirmaciones que desee corregir. Una vez que guarde, Git reproducirá las confirmaciones enumeradas. Para cada confirmación que desee reformular, Git lo devolverá a su editor. Para cada confirmación que desee editar, Git lo coloca en el shell. Si estás en el caparazón: Cambie la confirmación de la forma que desee. git commit --enmendar git rebase --continuar La mayor parte de esta secuencia se le explicará mediante la salida de los distintos comandos sobre la marcha. Es muy fácil; no es necesario que lo memorice, solo recuerde que git rebase --interactive le permite corregir las confirmaciones sin importar cuánto tiempo hayan pasado. Tenga en cuenta que no querrá cambiar las confirmaciones que ya ha enviado. O tal vez lo haga, pero en ese caso tendrá que tener mucho cuidado de comunicarse con todos los que hayan realizado sus compromisos y hayan trabajado por encima de ellos. ¿Cómo recupero / resincronizo después de que alguien empuja una rebase o un reinicio a una rama publicada? | Para modificar la confirmación anterior, realice los cambios que desee y organice esos cambios, y luego ejecute git commit --enmendar Esto abrirá un archivo en su editor de texto que representa su nuevo mensaje de confirmación. Comienza con el texto de su antiguo mensaje de confirmación. Cambie el mensaje de confirmación como desee, luego guarde el archivo y salga de su editor para terminar. Para modificar la confirmación anterior y mantener el mismo mensaje de registro, ejecute git commit --amend -C HEAD Para arreglar la confirmación anterior eliminándola por completo, ejecute git reset - cabeza dura ^ Si desea editar más de un mensaje de confirmación, ejecute git rebase -i HEAD ~ commit_count (Reemplace commit_count con el número de confirmaciones que desea editar). Este comando inicia su editor. Marque la primera confirmación (la que desea cambiar) como "editar" en lugar de "seleccionar", luego guarde y salga de su editor. Realice el cambio que desea realizar y luego ejecute git commit --enmendar git rebase --continuar Nota: También puede "Realizar el cambio que desee" desde el editor abierto por git commit --amend | Como ahoramencionado, git commit --amend es la forma de sobrescribir la última confirmación. Una nota: si también desea sobrescribir los archivos, el comando sería git commit -a --amend -m "Mi nuevo mensaje de confirmación" | También puedes usar git filter-branch para eso. git filter-branch -f --msg-filter "sed 's / errror / error /'" $ flawed_commit..HEAD No es tan fácil como un git commit trivial --amend, pero es especialmente útil, si ya tiene algunas fusiones después de su mensaje de confirmación erróneo. Tenga en cuenta que esto intentará reescribir cada confirmación entre HEAD y la confirmación defectuosa, por lo que debe elegir su comando msg-filter muy sabiamente ;-) | Prefiero esta forma: git commit --amend -c De lo contrario, habrá una nueva confirmación con un nuevo ID de confirmación. | Si está utilizando la herramienta Git GUI, hay un botón llamado Modificar última confirmación. Haga clic en ese botón y luego mostrará sus últimos archivos y mensajes de confirmación. Simplemente edite ese mensaje y podrá enviarlo con un nuevo mensaje de confirmación. O use este comando desde una consola / terminal: git commit -a --amend -m "Mi nuevo mensaje de confirmación" | Puede usar Git rebase. Por ejemplo, si desea volver a modificar para confirmar bbc643cd, ejecute $ git rebase bbc643cd ^ --interactivo En el editor predeterminado, modifique 'seleccionar' a 'editar' en la línea cuya confirmación desea modificar. Realice sus cambios y luego organícelos con $ git agregar Ahora puedes usar $ git commit --amend para modificar el compromiso, y después de eso $ git rebase --continuar para volver al compromiso principal anterior. | Si solo desea modificar su último mensaje de confirmación, haga lo siguiente: git commit --enmendar Eso lo llevará a su editor de texto y le permitirá cambiar el último mensaje de confirmación. Si desea cambiar los últimos tres mensajes de confirmación, o cualquiera de los mensajes de confirmación hasta ese momento, proporcione HEAD ~ 3 al comando git rebase -i: git rebase -i HEAD ~ 3 | Si tiene que cambiar un mensaje de confirmación anterior en varias ramas (es decir, la confirmación con el mensaje erróneo está presente en varias ramas), es posible que desee utilizar: git filter-branch -f --msg-filter \ 'sed "s / / / g"' - --todos Git creará un directorio temporal para reescribir y, además, respaldará las referencias antiguas en refs / original /. -f hará cumplir la ejecución de la operación. Esto es necesario si el directorio temporal ya está presente o si ya hay referencias almacenadas en refs / original. Si ese no es el caso, puede quitar esta bandera. - separa las opciones de rama de filtro de las opciones de revisión. --all se asegurará de que se reescriban todas las ramas y etiquetas. Debido a la copia de seguridad de sus antiguas referencias, puede volver fácilmente al estado antes de ejecutar el comando. Digamos que desea recuperar su maestro y acceder a él en la rama old_master: git checkout -b old_master refs / original / refs / heads / master | Utilizar git commit --enmendar Para entenderlo en detalle, una publicación excelente es 4. Reescritura de la historia de Git. También habla sobre cuándo no usar git commit --amend. | Si es su última confirmación, simplemente modifique la confirmación: git commit --amend -o -m "Nuevo mensaje de confirmación" (Usando el indicador -o (--only) para asegurarse de cambiar solo el mensaje de confirmación) Si es un compromiso enterrado, use la increíble rebase interactiva: git rebase -i @ ~ 9 # Muestra las últimas 9 confirmaciones en un editor de texto Busque la confirmación que desea, cambie pick a r (reescribir) y guarde y cierre el archivo. ¡Hecho! Tutorial de Vim en miniatura (o cómo reajustar con solo 8 pulsaciones de teclas 3jcwrEscZZ): Ejecute vimtutor si tiene tiempo hjkl corresponden a las teclas de movimiento ← ↓ ↑ → Todos los comandos pueden tener el prefijo "rango", p. Ej. 3j baja tres líneas i para ingresar al modo de inserción: el texto que ingrese aparecerá en el archivo Esc o Ctrlc para salir del modo de inserción y volver al modo "normal" U para deshacer Ctrlr para rehacer dd, dw, dl para eliminar una línea, palabra o letra, respectivamente cc, cw, cl para cambiar una línea, palabra o letra, respectivamente (igual que ddi) yy, yw, yl para copiar ("tirar") una línea, palabra o letra, respectivamente p o P para pegar después o antes de la posición actual, respectivamente : wEntrar para guardar (escribir) un archivo : q! Ingrese para salir sin guardar : wqEnter o ZZ para guardar y salir Si edita mucho texto, cambie a la distribución del teclado Dvorak, aprenda a escribir con el tacto y aprenda Vim. ¿Vale la pena el esfuerzo? Si. ProTip ™: No tenga miedo de experimentar con comandos "peligrosos" que reescriben el historial * - Git no borra sus confirmaciones durante 90 días de forma predeterminada; puedes encontrarlos en el reflog: $ git reset @ ~ 3 # Retrocede tres confirmaciones $ git reflog c4f708b HEAD @ {0}: restablecer: moviéndose a @ ~ 3 2c52489 HEAD @ {1}: confirmar: más cambios 4a5246d HEAD @ {2}: confirmar: realizar cambios importantes e8571e4 HEAD @ {3}: confirmar: hacer algunos cambios ... confirmaciones anteriores ... $ git restablecer 2c52489 ... y estás de vuelta donde empezaste * Tenga cuidado con opciones como --hard y --force, aunque pueden descartar datos. * Además, no reescriba el historial de ninguna rama en la que esté colaborando. | Enmendar Tienes un par deopciones aquí. Tu puedes hacer git commit --enmendar siempre que sea tu último compromiso. Rebase interactivo De lo contrario, si no es su última confirmación, puede hacer una rebase interactiva, git rebase -i [branched_from] [hash antes de confirmar] Luego, dentro de la rebase interactiva, simplemente agrega editar a esa confirmación. Cuando aparezca, haz un git commit --amend y modifica el mensaje de commit. Si desea retroceder antes de ese punto de confirmación, también puede usar git reflog y simplemente eliminar esa confirmación. Luego, vuelve a hacer un git commit. | Si está utilizando la GUI de Git, puede modificar la última confirmación que no se ha enviado con: Confirmar / Modificar última confirmación | Utilizo la GUI de Git tanto como puedo, y eso te da la opción de modificar la última confirmación: Además, git rebase -i origin / master es un buen mantra que siempre te presentará las confirmaciones que has realizado además del master, y te dará la opción de modificar, eliminar, reordenar o aplastar. No es necesario hacerse con ese hash primero. | Vaya, hay muchas formas de hacer esto. Otra forma más de hacer esto es eliminar la última confirmación, pero mantener sus cambios para no perder su trabajo. Luego puede hacer otra confirmación con el mensaje corregido. Esto se vería así: git reset --Soft HEAD ~ 1 git commit -m 'Mensaje de confirmación nuevo y corregido' Siempre hago esto si olvido agregar un archivo o hacer un cambio. Recuerde especificar --soft en lugar de --hard, de lo contrario perderá esa confirmación por completo. | Para cualquiera que busque una GUI de Windows / Mac para ayudar con la edición de mensajes más antiguos (es decir, no solo el último mensaje), recomendaría Sourcetree. Los pasos a seguir están debajo de la imagen. Para confirmaciones que aún no se han enviado a un control remoto: Asegúrese de haber confirmado o escondido todos los cambios actuales (es decir, para que no haya archivos en la pestaña "Estado del archivo"); de lo contrario, no funcionará. En la pestaña "Registro / Historial", haga clic con el botón derecho en la entrada con una línea contigua en el gráfico, una debajo de las confirmaciones que desea editar y seleccione "Rebasear hijos de interactivamente ..." Seleccione la fila completa para un mensaje de confirmación que desea cambiar (haga clic en la columna "Mensaje"). Haga clic en el botón "Editar mensaje". Edite el mensaje como desee en el cuadro de diálogo que aparece y luego haga clic en Aceptar. Repita los pasos 3-4 si hay otros mensajes de confirmación para cambiar. Haga clic en Aceptar: comenzará la reconfiguración. Si todo está bien, la salida terminará "Completado con éxito". NOTA: A veces he visto que esto falla con No se puede crear 'project_path / .git / index.lock': El archivo existe. al intentar modificar varios mensajes de confirmación al mismo tiempo. No estoy seguro de cuál es exactamente el problema, o si se solucionará en una versión futura de Sourcetree, pero si esto sucede, recomendaría reajustarlos uno a la vez (más lento pero parece más confiable). ... O ... para confirmaciones que ya se han enviado: Siga los pasos en esta respuesta, que son similares a los anteriores, pero requieren que se ejecute un comando adicional desde la línea de comando (git push origin -f) para forzar la rama. ¡Recomendaría leerlo todo y aplicar la precaución necesaria! | Si solo desea editar la última confirmación, use: git commit --enmendar o git commit --amend -m 'mensaje de una línea' Pero si desea editar varias confirmaciones seguidas, debe usar rebase en su lugar: git rebase -i En un archivo, como el anterior, escriba edit / e o una de las otras opciones, y presione guardar y salir. Ahora estarás en la primera confirmación incorrecta. Realice cambios en los archivos y se prepararán automáticamente para usted. Tipo git commit --enmendar Guarde y salga de eso y escriba git rebase --continuar para pasar a la siguiente selección hasta que termine con todas sus selecciones. Tenga en cuenta que estas cosas cambian todos sus hashes SHA después de esa confirmación en particular. | Si solo desea cambiar su último mensaje, debe usar la bandera --only o su atajo -o con commit --amend: git commit --amend -o -m "Nuevo mensaje de confirmación" Esto asegura que no mejore accidentalmente su compromiso con cosas preparadas. Por supuesto, es mejor tener una configuración de $ EDITOR adecuada. Luego puede dejar la opción -m, y Git completará previamente el mensaje de confirmación con el anterior. De esta forma se puede editar fácilmente. | Actualice su último mensaje de confirmación incorrecta con el nuevo mensaje de confirmación en una línea: git commit --amend -m "tu nuevo mensaje de confirmación" O intente restablecer Git como a continuación: # Puede restablecer su cabeza a n número de confirmaciones # NO es una buena idea para cambiar el último mensaje de confirmación, # pero puede tener una idea para dividir la confirmación en varias confirmaciones git reset --Soft HEAD ^ # Se restablecerá la última confirmación. Ahora tu # puede volver a confirmarlo con un nuevo mensaje de confirmación. Uso de reset para dividir confirmaciones en confirmaciones más pequeñas git reset también puede ayudarlo a dividir una confirmación en varias confirmaciones: # Reinicia tu cabeza. Estoy restableciendo a las últimas confirmaciones: git reset --Soft HEAD ^ # (Puede restablecer múltiples confirmaciones haciendo HEAD ~ 2 (no. De confirmaciones) # Ahora, reinicia tu cabeza paradividirlo en múltiples confirmaciones git reset HEAD # Agregue y confirme sus archivos por separado para realizar múltiples confirmaciones: por ejemplo git agregar aplicación / git commit -m "agregar todos los archivos en el directorio de la aplicación" git agregar config / git commit -m "agregar todos los archivos en el directorio de configuración" Aquí ha dividido con éxito su última confirmación en dos confirmaciones. | Sobre esta pregunta hay muchas respuestas, pero ninguna de ellas explica con gran detalle cómo cambiar los mensajes de confirmación más antiguos usando Vim. Estaba atascado tratando de hacer esto yo mismo, así que aquí escribiré en detalle cómo lo hice, especialmente para las personas que no tienen experiencia en Vim. Quería cambiar mis cinco últimas confirmaciones que ya envié al servidor. Esto es bastante 'peligroso' porque si alguien más ya se retiró de esto, puede estropear las cosas cambiando los mensajes de confirmación. Sin embargo, cuando esté trabajando en su propia pequeña rama y esté seguro de que nadie la sacó, puede cambiarla así: Digamos que desea cambiar sus cinco últimas confirmaciones, y luego escribe esto en la terminal: git rebase -i HEAD ~ 5 * Donde 5 es el número de mensajes de confirmación que desea cambiar (por lo tanto, si desea cambiar el décimo a la última confirmación, escriba 10). Este comando lo llevará a Vim, donde puede "editar" su historial de confirmaciones. Verá sus últimas cinco confirmaciones en la parte superior así: elegir mensaje de confirmación En lugar de elegir, debe escribir una nueva redacción. Puede hacer esto en Vim escribiendo i. Eso te hace entrar en modo de inserción. (Verá que está en modo de inserción con la palabra INSERT en la parte inferior). Para las confirmaciones que desea cambiar, escriba reescribir en lugar de seleccionar. Entonces necesitas guardar y salir de esta pantalla. Para hacerlo, primero ingrese al 'modo de comando' presionando el botón Esc (puede verificar que está en modo de comando si la palabra INSERT en la parte inferior ha desaparecido). Luego puede escribir un comando escribiendo:. El comando para guardar y salir es wq. Entonces, si escribe: wq, está en el camino correcto. Luego, Vim repasará cada mensaje de confirmación que desee volver a redactar, y aquí puede cambiar los mensajes de confirmación. Para hacer esto, ingrese al modo de inserción, cambie el mensaje de confirmación, ingrese al modo de comando y guarde y salga. ¡Haz esto cinco veces y te quedarás sin Vim! Luego, si ya presionó sus confirmaciones incorrectas, debe git push --force para sobrescribirlas. Recuerde que git push --force es algo bastante peligroso de hacer, ¡así que asegúrese de que nadie haya sacado del servidor ya que presionó sus confirmaciones incorrectas! ¡Ahora ha cambiado sus mensajes de confirmación! (Como puede ver, no tengo tanta experiencia en Vim, así que si utilicé la 'jerga' incorrecta para explicar lo que está sucediendo, ¡no dude en corregirme!) | Puedes usar git-rebase-reword Está diseñado para editar cualquier confirmación (no solo la última) de la misma manera que la confirmación --amend $ git rebase-reword Lleva el nombre de la acción de rebase interactivo para modificar una confirmación: "reescribir". Ver esta publicación y el hombre -sección modo interactivo- Ejemplos: $ git rebase-reword b68f560 $ git rebase-reword HEAD ^ | He agregado los alias reci y recm para volver a comprometerlo (modificarlo). Ahora puedo hacerlo con git recm o git recm -m: $ vim ~ / .gitconfig [alias] ...... cm = cometer reci = cometer --enmendar recm = cometer --enmendar ...... | Me di cuenta de que había enviado una confirmación con un error tipográfico. Para deshacer, hice lo siguiente: git commit --amend -m "T-1000, prototipo avanzado" git push --force Advertencia: forzar la inserción de sus cambios sobrescribirá la rama remota con la local. Asegúrese de no sobrescribir nada que desee conservar. También tenga cuidado al presionar forzar una confirmación enmendada (reescrita) si alguien más comparte la rama con usted, porque necesitarán reescribir su propio historial si tienen la copia antigua de la confirmación que acaba de reescribir. | Me gusta usar lo siguiente: estado de git git add --todos git commit -am "aquí va un mensaje sobre el cambio" git pull git push | Si no ha enviado el código a su rama remota (GitHub / Bitbucket), puede cambiar el mensaje de confirmación en la línea de comando como se muestra a continuación. git commit --amend -m "Tu nuevo mensaje" Si está trabajando en una rama específica, haga esto: git commit --amend -m "SUCURSAL-NOMBRE: mensaje nuevo" Si ya ha introducido el código con el mensaje incorrecto y debe tener cuidado al cambiar el mensaje. Es decir, después de cambiar el mensaje de confirmación e intentar presionarlo nuevamente, terminará teniendo problemas. Para suavizarlo, siga estos pasos. Lea mi respuesta completa antes de hacerlo. git commit --amend -m "SUCURSAL-NOMBRE: su nuevo mensaje" git push -f origin BRANCH-NAME # No es una buena práctica. Lea a continuación por qué? Nota importante: cuando usa el empuje forzado directamente, puede terminar con problemas de código que otros desarrolladores están trabajando en la misma rama. Entonces, para evitar esos conflictos, debe extraer el código de su rama antes de hacer la fuerzaempujar: git commit --amend -m "SUCURSAL-NOMBRE: su nuevo mensaje" git pull origin BRANCH-NAME git push -f origin NOMBRE-SUCURSAL Esta es la mejor práctica al cambiar el mensaje de confirmación, si ya se envió. | No es la respuesta que estás buscando? Lea otras preguntas con la etiqueta git git-commit git-rewrite-history modifique o haga su propia pregunta.